function MbaActionBinding(selector, accessorChain, action, events){
    
    this._selector;
    this._accessorChain;
    this._action; 
    this._events;
    this._superModel;
    
    if(arguments.length > 0)
        this.init(selector, accessorChain, action, events);
}

MbaActionBinding.prototype.init = function(selector, accessorChain, action, events){
    checkType(selector, 'string');
    checkType(accessorChain, MbaAccessorChain);
    checkType(action, 'string');
    checkType(events, 'array', 'string');
    
    this._selector = selector;
    this._accessorChain = accessorChain;
    this._action = action;
    this._events = events;
}

MbaActionBinding.prototype.getSelector = function(){
    return this._selector;
};

MbaActionBinding.prototype.getAction = function(){
    return this._action;
};

MbaActionBinding.prototype.prependAccessors = function(accessorChain){
    checkType(accessorChain, MbaAccessorChain);
    this._accessorChain.prependAll(accessorChain);    
};

MbaActionBinding.prototype.getSuperModel = function(){
    return this._superModel;
};

MbaActionBinding.prototype.setSuperModel = function(superModel){
    this._superModel = superModel;
};

MbaActionBinding.prototype.visit = function(visitor){
    checkType(visitor, MbaDirectiveVisitor);
    visitor.visitActionBinding(this);
};

MbaActionBinding.prototype.getModel = function(route){
    checkType(route, MbaRoute);
    var model = this._accessorChain.getModelFromRoute(this._superModel, route);
    return model;
};

MbaActionBinding.prototype.bindAction = function(dom, route, node){
    checkType(dom, MbaDom);
    checkType(route, MbaRoute);
    checkType(node, MbaNode2);
    var actionBinding = this;
    var bindingRoute = route.clone();
    var handler = function(){
        var model = actionBinding.getModel(route);
        model[actionBinding.getAction()]();
        var modelAfterAction = actionBinding.getModel(route);//TODo tester cette méthode pour ne pas lever d'erreur si le modèle n'existe pas, peut etre faire uen fonction dédié modelFromRouteExists ?
        if(modelAfterAction != null)//model can be removed during action
            node.updateFromClosestParentDirective(actionBinding.getSuperModel(), bindingRoute);
    };
    var domElement = dom.getDom(0);
    for(var i=0 ; i< this._events.length ; i++){
        domElement.addEventListener(this._events[i], handler);
    }
};